<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // Object.defineProperty() 直接在一个对象上定义一个新属性，或者修改一个对象的现有属性
    var obj = {wife:["a","b"]};

    // 属性描述符 configurable enumerable value writable
    Object.defineProperty(obj,"wife",{
        enumerable:false, //当enumerable为true 该属性才能出现在对象的for in循环中
        configurable:false, //删除不了该属性 该属性也不能重新定义描述符
        get(){console.log("get");return ["zdy"]},
        set(val){console.log("set")}
    })


    // 直接删除属性  触发不了set方法
    // delete obj.wife

    //当你利用索引直接设置一个数组项时 触发不了set方法
    // obj.wife[0]="c"

    //当你修改数组的长度时 触发不了set方法
    obj.wife.length = 0;
</script>
</html>